package controller.listeners.knbase;


import model.KnBaseModel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import business.ViewLogger;
import business.knBase.KnBaseGeneric;



import view.KnBaseView;
import view.ViewUtils;

/**
 * Controlador de pulsacion de teclas sobre la tabla
 * @author 53385255R
 *
 */
public class ContentTableKeyDownListener implements Listener {


	private KnBaseView _view;
	private KnBaseModel _model;
	
			
			
			/**
			 * @param view
			 * @param model
			 */
			public ContentTableKeyDownListener(KnBaseView view,
					KnBaseModel model) {
				this._model = model;
				this._view = view;
			}

			/**
			 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
			 */
			@Override
			public void handleEvent(Event event) {
			
				System.out.println(event.keyCode);
				System.out.println(event.stateMask);
				System.out.println(event.character);
				System.out.println("---------------");
				if (event.keyCode == SWT.DEL) {
					if (ViewUtils.getInstance().confirmationMessage("Eliminación", "Se va a eliminar el registro seleccionado ¿Está seguro?.")) {
						_model.deleteSelectedReg();
						_view.SetContentOfTable(_model.getRegs());
						
					}
				} else if (event.keyCode == SWT.F2) {
					String newreg = ViewUtils.getInstance().textMessage("Inserte un nuevo registro","Inserte los campos del registro separados por tabuladores (¡No espacios!)", "");
					KnBaseGeneric reg = _view.getSelectedRow();
					KnBaseGeneric regnew = getKnReg(newreg);
					if ((regnew != null) && (reg.getRegistry().size() == regnew.getRegistry().size())) {
						_model.insertReg(regnew);
						_view.SetContentOfTable(_model.getRegs());
					} else {
						ViewUtils.getInstance().informationMessage("FALLO", "El registro no ha sido insertado con el formato y columnas adecuadas", false);
					}
					
				} else if (event.keyCode == SWT.F3) {
					String oldvalue = "";
					KnBaseGeneric reg = _view.getSelectedRow();
					for (String value: reg.getRegistry()) 
						oldvalue += "\t" + value;
					oldvalue = oldvalue.replaceFirst("\t", "");
					String newreg = ViewUtils.getInstance().textMessage("Modificación de un nuevo registro","Inserte los nuevos valores del registro separados por tabuladores (¡No espacios!)", oldvalue);
					
					KnBaseGeneric regnew = getKnReg(newreg);
					if ((regnew != null) && (reg.getRegistry().size() == regnew.getRegistry().size())) {
						_model.modificationReg(regnew);
						_view.SetContentOfTable(_model.getRegs());
					} else {
						ViewUtils.getInstance().informationMessage("FALLO", "El registro no ha sido insertado con el formato y columnas adecuadas", false);
					}
					
				} else if  (event.keyCode == SWT.F1) 
				{
					
					String help = 		"\n\nACCIONES PARA LA MODIFICACION DE KNBASE\n- Del: elimina el registro." +
					"\n- F2: inserta un nuevo registro." +
					"\n- F3: modifica un registro existente.";
					ViewUtils.getInstance().informationMessage("Ayuda modificacion KnBase.db", help,true);
					ViewLogger.getInstance().info(help);
			
				}
			}

			
			private KnBaseGeneric getKnReg(String newreg) {
				
					
					if (newreg != null) { 
						String[] regsplis = newreg.split("[\t-]");
						KnBaseGeneric reg = new KnBaseGeneric();
						for (String spl : regsplis) 
							reg.getRegistry().add(spl);
						
						if (reg.getRegistry().size() > 0)
							return reg;
					}
					
					return null;
						
				
			}

			
		
			
		}